package io.scnb.lesson001.demo9;

import io.scnb.lesson001.demo5.IocUtils;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AutowireCandidateTest {
    /**
     * 容器在创建setterBean的时候，发现其autowire属性值为byType，此时会在SetterBean类中查找所有
     * setter方法列表，其中包含了setService方法，其参数类型是IService，然后就会去容器中按照IService类型
     * 查找所有符合条件的bean列表，此时容器中会返回满足IService这种类型并且autowire-candidate值为true的bean
     * （bean的autowire-candidate属性默认为true）。此时容器中满足条件的bean有2个：serviceA和serviceB，此时会
     * 再去看列表中是否只有一个主要的bean（即该bean元素的primary属性值为true），但是bean的primary属性默认值都是
     * false，所以没有primary为true的bean，此时spring容器不知道该选哪个bean，作为setterBean的值了。
     */

    @Test
    public void setterBean() {
        String beanXml = "classpath:/io/scnb/lesson001/demo9/autowireCandidateBean.xml";
        ClassPathXmlApplicationContext context = IocUtils.context(beanXml);
        System.out.println(context.getBean(SetterBean.class));

        SetterBean.IService service = context.getBean(SetterBean.IService.class);
        System.out.println(service);
    }
}
